home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / defoma / libdefoma-subst.pl < prev    next >
Text File  |  2006-06-17  |  3KB  |  189 lines

  1. sub com_subst_edit_rule {
  2.     usage_and_exit if (@ARGV == 0);
  3.     my $rulename = shift(@ARGV);
  4.  
  5.     mylock(1);
  6.     init_all();
  7.  
  8.     my $sb = defoma_subst_open(rulename => $rulename);
  9.  
  10.     unless ($sb) {
  11.     printw("Cannot open $rulename");
  12.     term_all();
  13.     mylock(0);
  14.     exit ERROR;
  15.     }
  16.  
  17.     my $rulefile = $sb->{rulefile};
  18.  
  19.     unless (-f $rulefile) {
  20.     printw("No rulefile is found for $rulename");
  21.     term_all();
  22.     mylock(0);
  23.     exit ERROR;
  24.     }
  25.     
  26.     my $newfile = `/bin/tempfile`;
  27.  
  28.     chomp($newfile);
  29.     
  30.     copy($rulefile, $newfile);
  31.     system('/usr/bin/sensible-editor', $newfile);
  32.  
  33.     my @new = ();
  34.     if (open(F, $newfile)) {
  35.     while (<F>) {
  36.         chomp($_);
  37.         push(@new, $_) if ($_ ne '' && $_ !~ /^\#/);
  38.     }
  39.  
  40.     my ($i, $j);
  41.     my $max = $sb->{rule_cnt};
  42.  
  43.     for ($i = 0; $i < $max; $i++) {
  44.         $j = $sb->{rule}->[$i];
  45.         next if ($j eq '' || $j =~ /^\#/);
  46.  
  47.         unless (grep($_ eq $j, @new)) {
  48.         defoma_subst_remove_rule_by_num($sb, $i);
  49.         }
  50.     }
  51.  
  52.     foreach $i (@new) {
  53.         unless (grep($_ eq $i, @{$sb->{rule}})) {
  54.         defoma_subst_add_rule($sb, split(' ', $i));
  55.         }
  56.     }
  57.     }
  58.  
  59.     defoma_subst_close($sb);
  60.  
  61.     term_all();
  62.     copy($newfile, $rulefile);
  63.     unlink($newfile, $newfile.'~');
  64.     mylock(0);
  65.  
  66.     exit 0;
  67. }
  68.  
  69. sub com_subst_add_rule {
  70.     usage_and_exit if (@ARGV <= 1);
  71.     my $rulename = shift(@ARGV);
  72.  
  73.     mylock(1);
  74.     init_all();
  75.  
  76.     my $sb = defoma_subst_open(rulename => $rulename);
  77.  
  78.     unless ($sb) {
  79.     printw("Cannot open $rulename");
  80.     term_all();
  81.     mylock(0);
  82.     exit ERROR;
  83.     }
  84.  
  85.     my $rulefile = $sb->{rulefile};
  86.  
  87.     unless (-f $rulefile) {
  88.     printw("No rulefile is found for $rulename");
  89.     term_all();
  90.     mylock(0);
  91.     exit ERROR;
  92.     }
  93.  
  94.     foreach my $i (@ARGV) {
  95.     my @rule = split(/[ \t]+/, $i);
  96.     my $rulestr = join(' ', @rule);
  97.     unless (grep($_ eq $rulestr, @{$sb->{rule}})) {
  98.         defoma_subst_add_rule($sb, @rule);
  99.     }
  100.     }
  101.  
  102.     defoma_subst_close($sb);
  103.  
  104.     term_all();
  105.     mylock(0);
  106.  
  107.     exit 0;
  108. }
  109.  
  110. sub com_subst_remove_rule {
  111.     usage_and_exit if (@ARGV <= 1);
  112.     my $rulename = shift(@ARGV);
  113.  
  114.     mylock(1);
  115.     init_all();
  116.  
  117.     my $sb = defoma_subst_open(rulename => $rulename);
  118.  
  119.     unless ($sb) {
  120.     printw("Cannot open $rulename");
  121.     term_all();
  122.     mylock(0);
  123.     exit ERROR;
  124.     }
  125.  
  126.     my $rulefile = $sb->{rulefile};
  127.  
  128.     unless (-f $rulefile) {
  129.     printw("No rulefile is found for $rulename");
  130.     term_all();
  131.     mylock(0);
  132.     exit ERROR;
  133.     }
  134.  
  135.     foreach my $i (@ARGV) {
  136.     my @rule = split(/[ \t]+/, $i);
  137.     defoma_subst_remove_rule($sb, @rule);
  138.     }
  139.  
  140.     defoma_subst_close($sb);
  141.  
  142.     term_all();
  143.     mylock(0);
  144.  
  145.     exit 0;
  146. }
  147.  
  148. sub com_subst_new_rule {
  149.     usage_and_exit if (@ARGV == 0);
  150.     
  151.     my $rulename = shift(@ARGV);
  152.     my $rulefile = SUBSTRULEDIR . '/' . $rulename . '.subst-rule';
  153.  
  154.     defoma_subst_newrule($rulefile, $rulename, @ARGV);
  155.  
  156.     exit 0;
  157. }
  158.  
  159. sub com_subst_check_rule {
  160.     usage_and_exit if (@ARGV == 0);
  161.  
  162.     my $rulename = shift(@ARGV);
  163.     my $rulefile = SUBSTRULEDIR . '/' . $rulename . '.subst-rule';
  164.  
  165.     if (-f $rulefile) {
  166.     exit 0;
  167.     } else {
  168.     exit 1;
  169.     }
  170. }
  171.  
  172. sub main {
  173.     my $command = shift;
  174.     
  175.     if ($command eq 'new-rule') {
  176.     com_subst_new_rule();
  177.     } elsif ($command eq 'edit-rule') {
  178.     com_subst_edit_rule();
  179.     } elsif ($command eq 'add-rule') {
  180.     com_subst_add_rule();
  181.     } elsif ($command eq 'remove-rule') {
  182.     com_subst_remove_rule();
  183.     } elsif ($command eq 'check-rule') {
  184.     com_subst_check_rule();
  185.     }
  186. }
  187.  
  188. 1;
  189.